package com.zhouyx.userservice.groovy;

import groovy.lang.GroovyShell;
import groovy.lang.Script;
import groovy.util.Eval;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.FileNotFoundException;
import java.io.FileReader;

/**
 * @title: Groovy
 * @Author: max.zhou1
 * @Date: 2024/9/4 22:14
 * @Version: 1.0
 **/
public class Groovy {
    public static void main(String[] args) throws FileNotFoundException, ScriptException {
        System.out.println(System.getProperty("user.dir"));

        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("groovy");
        engine.eval(new FileReader("/Users/max.zhou1/zhouyx/code/java/springboot-active/user-service/src/main/java/com/zhouyx/userservice/groovy/test.groovy"));

        // 方法1
        // 1.执行没有参数的表达式，其中可以调用方法
        System.out.println(Eval.me("33*3"));// 99
        Eval.me("'foo'.toUpperCase()"); // FOO

        // 2. 执行有一个参数的表达式
        // x赋值为4，执行表达值（变量名固定为x）
        Eval.x(4, "2 * x"); // 8
        // k赋值为4，，执行表达值（自定义变量名，并在脚本中使用）
        Eval.me("k", 4, "2 * k"); // 8

        // 3. 执行有两个参数的表达式
        // x赋值为4， y赋值为6，执行表达值（变量名固定依次为x、y）
        Eval.xy(4, 5, "x * y"); // 20

        // 3. 执行有三个参数的表达式
        // x赋值为4， y赋值为6，z赋值为6，执行表达值（变量名固定依次为x、y、z）
        Eval.xyz(4, 5, 6, "x * y + z"); // 26
    }
}
